// 双向链表
#ifndef DOUBLE_LINKED_LIST_H
#define DOUBLE_LINKED_LIST_H

/// @brief 双链表结点结构体
typedef struct DNode
{
	int data;					// 结点数据
	struct DNode *prior, *next; // 前一个和后一个结点
} DLNode, *DoubleLinkedList;

/// @brief 用一个数组创建一个双链表
/// @param array 数组
/// @param n 数组长度
/// @return 双链表对象指针（头结点指针）
DoubleLinkedList createDoubleLinkedList(int[], int);

/// @brief 插入一个结点
/// @param list 双链表对象
/// @param data 插入对象
/// @param index 插入下标（从0开始）
void doubleListInsert(DoubleLinkedList, int, int);

/// @brief 删除一个结点
/// @param list 双链表对象
/// @param index 删除下标（从0开始）
void doubleListDelete(DoubleLinkedList, int);

/// @brief 获取双链表中指定位置的结点
/// @param list 双链表对象
/// @param index 下标（从0开始）
/// @return 对应的结点指针，未找到则为NULL
DLNode *getDoubleListNode(DoubleLinkedList, int);

/// @brief 打印双链表
/// @param list 双链表对象
void printDoubleList(DoubleLinkedList);

#include "./double-linked-list.c"

#endif